如何用matlab构造一个这样的三维数组? 您所在的位置:网站首页 matlab 矩阵生成 如何用matlab构造一个这样的三维数组?

如何用matlab构造一个这样的三维数组?

2023-03-27 23:36| 来源: 网络整理| 查看: 265

这是一个简单的MATLAB矩阵操作问题,使用不同的方法来解决这个问题能够很好地检验对矩阵运算地掌握能力。下面我用五种不同的方式来解决这个问题。

有一个100×1000的矩阵A。我们希望生成一个100×1000×50的矩阵B,使得满足这样的条件:B(:,:,1)==A, B(:,:,2)==A, ..., B(:,:,end)==A。

A = randn(10,100);1.for循环赋值

一般地,不考虑性能的话,没有for循环解决不了的问题。

我们可以直接用for循环对B矩阵进行赋值,注意需要对B预分配内存。

B1 = zeros([size(A),50]); for ii = 1:size(B1,3) B1(:,:,ii) = A; end2.for循环cat串联数组

cat函数能够沿着指定维度将矩阵进行串联。

B2 = []; for ii = 1:50 B2 = cat(3,A,B2); end3. repmat

repmat函数用于复制矩阵并能同时扩展矩阵的维数。这应该是本题的标准答案。

B3 = repmat(A,[1,1,50]);4.借助隐式扩展

从MATLAB R2016b开始,对基本运算函数可以使用隐式扩展。我们可以直接对A矩阵加上一个100×1000×50的全0矩阵。

B4 = A+zeros([size(A),50]);

同样的道理,也可以写成下面任意一种形式,但使用加法运算应该是最快的。

B4 = A-zeros([size(A),50]); B4 = A.*ones([size(A),50]); B4 = A.^ones([size(A),50]); B4 = A./ones([size(A),50]); B4 = mod(A,zeros([size(A),50])); B4 = min(A,inf([size(A),50])); B4 = max(A,-inf([size(A),50]));

R2016b以下的版本,使用bsxfun也可以实现。

5.kron+reshape+permute

这种方法完全是强行往上凑,但如果是用于检验对几个函数的掌握能力的话,还是不错的。

B5 = kron(A,ones([1,50])); B5 = reshape(B5,size(A,1),[],size(A,2)); B5 = permute(B5,[1,3,2]);

最后验证一下B1,B2,B3,B4,B5是否相等。

isequal(B1,B2,B3,B4,B5); % ans = 1

最后,强调一下,上述方法中,最简洁、最直接的、最快的是使用repmat函数。最慢的是for循环cat串联数组。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有